package juego;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import mazo.Mazo;
import mazo.MazoFactory;
import jugador.JugadorFactory;
import jugador.Jugador;
import jugador.Personaje;
import jugador.Rol;
import carta.Carta;
import carta.ICarta;
import carta.bang;
import carta.Barrile;



public class Bang {
	
	
	private INumJugadores i;
	private JuegoFactory fabJug;
	private Iterator<Jugador> jugadoresIt;
	private List<Jugador> jugadores;
	private List<Personaje> personajes;
	private List<Rol> roles;	
	private Tablero tablero;
	private JugadorFactory f;
	private MazoFactory mazfac;

	
	public Bang(){		
		jugadores=new LinkedList<Jugador>();
		f=new JugadorFactory();
		mazfac=new MazoFactory();
		mazfac.createMazo();
		personajes=f.createPersonajes();
		roles=f.createRol();
		fabJug=new JuegoFactory();
		
	}
	
	public void addJugador(String nombre){		
		jugadores.add(new Jugador(nombre));
	}

	public void inicializa(){
		tablero=fabJug.createTablero(jugadores.size());
		i=fabJug.createNumJugadores(jugadores.size());
		i.asignar(jugadores,personajes,roles);
		Mazo.getInstance().barajarMazo();
		repatir(jugadores);
	
	}
	
	private void repatir(List<Jugador> jugadores2) {		
		for(Jugador j:jugadores2){
			for(int i=0;i<j.getNumVidas();i++){
				j.getCartasEnMano().add(Mazo.getInstance().robarCarta());	
			}
		}	
	}
	
	public void jugar(){		
		Jugador jugadorActual = null;
		for(Jugador j:jugadores){
			if(j.getRol().equals("Sheriff"))
				jugadorActual=j;
		}
		System.out.println("Turno del jugador: " + jugadorActual.getNombre());
		System.out.println(jugadorActual.toString());
		ICarta c=jugarCarta(jugadorActual.getCartasEnMano());
		Jugador j=seleccionaJugador(jugadores,jugadorActual);
		if(c instanceof bang){
			Barrile c1=(Barrile)c;
		}	
	}
	
	private ICarta jugarCarta(List<ICarta> list){	
		int indice = 1;
		
		for(ICarta c:list){
			System.out.println(indice + ")" + c.toString());
			indice++;
		}

		int seleccion = -1;
		
		while (seleccion == -1) {
			try {
				System.out.print("Seleccione la carta que va a jugar: ");
				BufferedReader br = new BufferedReader(new InputStreamReader(
						System.in));
				String linea = br.readLine();
				seleccion = Integer.parseInt(linea);
				if (seleccion > list.size() || seleccion == 0)
					seleccion = -1;
			} catch (Exception e) {
			}
		}
		
		ICarta res=list.get(seleccion);

		return res;
		}
	
	private Jugador seleccionaJugador(List<Jugador> j,Jugador j2){	
		int i=j.indexOf(j2);
		j.remove(j2);
		int indice=1;
		
		for(Jugador j1:j){
			System.out.println(indice + ")" + j1.getNombre());
		}
		
		int seleccion=-1;
		
		while(seleccion==-1){
			try{
				System.out.println("Seleccione Jugador:");
				BufferedReader br=new BufferedReader(new InputStreamReader(
						System.in));
				String linea=br.readLine();
				seleccion=Integer.parseInt(linea);
				if(seleccion>j.size()|| seleccion==0){
					seleccion=-1;
				}
			}catch(Exception e){}	
		}
		
		Jugador j3=j.get(seleccion);
		j.add(i,j2);
		return j3;
	}
	
	public void descartar(ICarta c){	
		Mazo.getInstance().agregarCarta(c);
	}

	
	public List<Jugador> getJugadores() {
		return jugadores;
	}
}


